在Claude Code中生成ER图
你会学到什么:用Claude Code生成专业ER图的完整工作流——从Mermaid语法到导出PNG,最后嵌入Word文档。读完本文,你可以快速产出数据库设计文档,不再为手绘ER图或用复杂工具而烦恼。
一、ER图是什么
ER图(Entity-Relationship Diagram)用来描述系统中实体之间的关系,是数据库设计的核心工具。
四大核心概念
| 概念 | 说明 | 示例 |
|---|---|---|
| 实体(Entity) | 系统中的对象 | 用户、订单、商品 |
| 关系(Relationship) | 实体间的关联 | 用户"下"订单 |
| 属性(Attribute) | 实体的特征 | 用户有姓名、邮箱 |
| 基数(Cardinality) | 关系的数量约束 | 一个用户可以有多个订单 |
最简单的示例
用户 ──[下]──> 订单
text
用户和订单是一对多关系:一个用户可以下多个订单,一个订单只能属于一个用户。
二、Mermaid erDiagram 语法详解
Mermaid的ER图语法简洁直观,是Claude Code默认支持的图表格式。
基本语法结构
关系符号对照表
| 符号 | 含义 | 示例 |
|---|---|---|
| ` | -- | |
| ` | --o{` | |
| ` | --|{` | |
}|--|{ | 多对一(至少一) | 订单 ── 用户 |
}|--o{ | 多对一(允许零) | 产品 ── 分类 |
}|--o{ | 多对多 | 学生 ── 课程 |
属性定义语法
| 符号 | 含义 |
|---|---|
PK | Primary Key(主键) |
FK | Foreign Key(外键) |
UK | Unique Key(唯一键) |
完整示例:电商系统ER图
设计思路:
- 从核心业务流程出发:用户下订单 → 订单包含商品 → 支付完成
- 补充辅助实体:地址、分类、支付记录
- 明确基数关系:一对多用
||--o{,多对多拆分成中间表
三、Claude Code生成ER图的Prompt技巧
Claude Code可以直接在对话中生成Mermaid ER图代码,无需切换工具。
基础Prompt模板
用Mermaid erDiagram语法画一个[系统名称]的ER图,包含以下实体和关系:
实体:
- 用户(id、用户名、邮箱、创建时间)
- 订单(id、用户ID、总金额、状态)
关系:
- 一个用户可以有多个订单
- 一个订单只能属于一个用户
text
输出效果:Claude会生成完整的Mermaid代码,直接复制到Markdown文件即可渲染。
高级Prompt:指定完整约束
用Mermaid erDiagram语法为在线教育系统设计ER图,要求:
实体清单(包含主键PK和外键FK):
1. 学生(id、姓名、邮箱、手机号、注册时间)
2. 课程(id、标题、描述、价格、讲师ID)
3. 讲师(id、姓名、简介)
4. 订单(id、学生ID、课程ID、支付金额、支付时间)
5. 学习进度(id、学生ID、课程ID、完成度、最后学习时间)
关系基数:
- 一个学生可以购买多门课程(通过订单关联)
- 一门课程可以被多个学生购买
- 一门课程只能有一个讲师
- 一个讲师可以讲授多门课程
- 每个学生对每门课程只能有一条学习进度记录
请标注所有主键(PK)和外键(FK),并使用中文关系描述。
text
迭代优化Prompt
当Claude生成的ER图不完整时,可以这样追问:
这个ER图还缺少:
1. 课程分类表(课程和分类是多对多关系)
2. 课程评分表(学生对课程打分)
3. 视频资源表(一个课程包含多个视频)
4. 请补充这些实体并完善关系
text
三个实战可用的Prompt模板
模板1:快速原型
为[系统名称]画一个简化的ER图,只包含核心实体和最关键的关系。使用Mermaid语法。
text
模板2:完整设计
设计[系统名称]的完整ER图:
- 列出所有实体和字段(标注PK/FK)
- 明确所有关系和基数
- 考虑扩展性(如软删除字段、时间戳)
- 用中文标注关系含义
text
模板3:对比优化
我有一个ER图(见下方Mermaid代码),请检查:
1. 是否有遗漏的实体或关系?
2. 基数定义是否合理?
3. 字段设计是否规范(如主键、外键、唯一约束)?
[粘贴现有ER图代码]
请给出优化建议。
text
四、PlantUML ER图方案
当Mermaid无法满足需求时(如需要更复杂的样式或特殊符号),PlantUML是备选方案。
Mermaid vs PlantUML对比
| 特性 | Mermaid | PlantUML |
|---|---|---|
| 学习曲线 | 低(语法简单) | 中(语法复杂) |
| 渲染方式 | JavaScript实时渲染(12.3.0,2026-11-07 核实) | 需 Java 11+(1.2026.9) |
| 样式定制 | 有限 | 丰富(主题、颜色) |
| Claude支持 | 原生支持(可直接输出) | 支持(需额外配置) |
| 文档兼容 | Markdown原生 | 需要插件或在线服务 |
| 特殊符号 | 基础符号 | 支持UML全套符号 |
PlantUML ER图语法示例
@startuml E-Commerce ER Diagram
' 实体定义
entity "Customer\n用户" as customer {
*id : INTEGER <<generated>>
--
username : VARCHAR(50)
email : VARCHAR(100) <<unique>>
created_at : TIMESTAMP
}
entity "Order\n订单" as order {
*id : INTEGER <<generated>>
--
customer_id : INTEGER <<FK>>
total_amount : DECIMAL(10,2)
status : VARCHAR(20)
created_at : TIMESTAMP
}
entity "Product\n商品" as product {
*id : INTEGER <<generated>>
--
name : VARCHAR(200)
price : DECIMAL(10,2)
stock : INTEGER
}
' 关系定义
customer ||..o{ order : "places"
order }o..|| product : "contains"
@enduml
plantuml
适用场景:
- 需要导出高分辨率矢量图(SVG/EPS)
- 需要自定义样式(颜色、字体、线条粗细)
- 与其他UML图(如类图、时序图)一起使用
- Mermaid无法表达的关系类型
环境配置实战:让 AI 用 ASDF 装 Java
PlantUML 唯一的门槛是要 Java 环境。传统做法很繁琐:下载安装包、去系统设置里配 JAVA_HOME、验证版本——每换一台机器重来一遍。有了 AI 工具之后,这件事可以一句话交给它,关键是提示词要让它动手,而不是只给教程:
PlantUML 需要 Java 环境才能运行,你看看如何在本地配置对应的 Java 环境。
推荐使用 ASDF(https://asdf-vm.com ,官方文档提供中文版)进行统一的下载与配置,
我需要你来下载并配置完成,最后验证 java -version 可用。
markdown
这段提示词有两个要点:
- 只问"如何在本地配置",AI 通常会输出 1-2-3 步的教程文档(下载什么、在哪配环境变量)——和手动配置一模一样,只是换了个人念说明书
- 补上"推荐使用 ASDF"和"我需要你来下载并配置",AI 才会真正执行下载、安装、写配置、验证的完整流程
为什么推荐 ASDF:ASDF 是一个跨平台的版本管理器,通过插件机制统一管理 Java、Node.js、Python、Go、.NET 等几乎所有语言运行时(插件按语言名检索,覆盖数百种),有中文文档,macOS 和 Linux 通用。常用命令:
# macOS 安装 asdf 并挂载到 shell
brew install asdf
echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ~/.zshrc && exec $SHELL
# 安装 Java(可用版本以 asdf list all java 输出为准)
asdf plugin add java
asdf list all java | grep openjdk-21
asdf install java openjdk-21
asdf global java openjdk-21
java -version
bash
mise 备选:如果嫌 ASDF 的 shim 机制慢,可以用 mise(Rust 实现的 asdf 替代品,读取同一份
.tool-versions文件,兼容 asdf 插件生态,还额外提供环境变量管理和任务运行器)。两者择一即可,下文以 asdf 为准。
实际执行时有两个加速技巧:
- AI 下载海外资源慢时,随时打断 Claude Code(Esc),告诉它"下载这些依赖时使用代理工具",再继续执行,下载会明显加快
- 配置过程报错时把错误贴回去问,ASDF 生态成熟,基本没有解不了的环境问题——这也是经验之谈:有了 ASDF 之后,macOS 和 Windows 上再没遇到过卡壳的环境配置
下载与命令行运行 PlantUML
Java 就绪后,去 PlantUML Releases 页下载 .jar 包(Java 打包的二进制,当前稳定版 1.2026.9,2026-11-07 核实),直接用 java -jar 传参出图:
# 下载(版本号以 Releases 页实际资产名为准)
curl -L -o plantuml.jar \
https://github.com/plantuml/plantuml/releases/download/v1.2026.9/plantuml-1.2026.9.jar
# 单文件渲染 PNG(-charset UTF-8 防中文乱码)
java -jar plantuml.jar -charset UTF-8 -tpng diagram.puml
# 批量渲染目录下所有 .puml——海量建表 SQL 转图的正确姿势
java -jar plantuml.jar -charset UTF-8 -tpng *.puml
# 输出矢量 SVG / 指定输出目录
java -jar plantuml.jar -charset UTF-8 -tsvg diagram.puml -o ./output
bash
注意命令行只负责渲染,样式(配色、字体、边框)写在 .puml 文件里的 skinparam 或 theme 中——这正是 01 节"改造开源项目不如直接换引擎"时选 PlantUML 的原因:样式参数全部文本化,AI 可控。
沉淀为 Skill:一句话调用 PlantUML
环境配好、命令跑通之后,把这套东西变成 skill,以后任何会话里用自然语言就能调用:
创建一个本地化的 skill 来调用 PlantUML 的 jar 包生成图表:
可以传入一个 SQL 文件(建表语句),先转换为 PlantUML 的 ER 图/类图语法,
再渲染导出对应的 PNG 图片。skill 创建到本地 .claude/skills 目录中。
markdown
实测(2026-10,Claude Code)这个任务约 3 分钟完成:AI 自动创建 ~/.claude/skills/plantuml/ 目录、写好 SKILL.md、用真实 SQL 跑通渲染并自测。生成的 SKILL.md 大致长这样(英文为主,内容是告诉 AI:环境在哪、用什么命令、输出到哪):
---
name: plantuml
description: Render UML diagrams with local PlantUML jar. Input a .puml file or
SQL DDL (auto-converted). Outputs PNG/SVG. Triggers: 画ER图/类图/时序图, plantuml.
---
# PlantUML Renderer
## Environment
- Java: managed by asdf (`asdf current java`), no manual JAVA_HOME needed
- Jar: `~/tools/plantuml/plantuml.jar` (v1.2026.9)
## Workflow
1. If input is SQL DDL, convert CREATE TABLE statements into PlantUML
`entity` blocks (PK/FK annotations preserved)
2. Write the PlantUML source to `<name>.puml`
3. Render:
java -jar ~/tools/plantuml/plantuml.jar -charset UTF-8 -tpng <name>.puml
4. PNG lands next to the source file; report the path to the user
## Options
- SVG output: replace -tpng with -tsvg
- Output dir: -o ./output
- Styles go INSIDE the .puml via skinparam/theme, not CLI flags
markdown
之后的使用就极其简单——"把这个 SQL 转成 PlantUML,输出最终 PNG",AI 自动走 skill。同样的思路也可以做成 MCP 服务供其他 AI 工具调用(注册成 tool,暴露 render_puml 接口),skill 与 MCP 二选一:个人复用选 skill(零门槛),团队共享选 MCP。
五、渲染与导出
ER图生成后,需要渲染成可视化图片并导出。以下四种方案覆盖不同使用场景。
方案1:VS Code实时预览(开发阶段)
安装插件:Markdown Preview Enhanced
# 在VS Code扩展商店搜索安装
# 或命令行安装
code --install-extension shd101wyy.markdown-preview-enhanced
bash
使用方法:
- 创建
.md文件,粘贴Mermaid代码 - 按
Cmd+Shift+V(Mac)或Ctrl+Shift+V(Windows)打开预览 - 实时查看渲染效果,调整代码
优点:无需额外工具,修改即时反馈。
方案2:mermaid-cli批量导出(生产阶段)
安装命令行工具:
npm install -g @mermaid-js/mermaid-cli
bash
导出命令:
# 导出PNG
mmdc -i er-diagram.md -o er-diagram.png
# 导出SVG(矢量图,可无限缩放)
mmdc -i er-diagram.md -o er-diagram.svg
# 导出PDF
mmdc -i er-diagram.md -o er-diagram.pdf
# 高清PNG(指定宽度和DPI)
mmdc -i er-diagram.md -o er-diagram-hd.png -w 2048 -s 2
bash
输入文件格式(er-diagram.md):
```mermaid
erDiagram
CUSTOMER ||--o{ ORDER : places
markdown
**高级选项**:
```bash
# 透明背景
mmdc -i input.md -o output.png --backgroundColor transparent
# 指定主题(default/forest/dark/neutral)
mmdc -i input.md -o output.png -t dark
# 从标准输入读取
echo 'erDiagram{A||--o{B}' | mmdc -o output.png
text
方案3:在线渲染器(快速分享)
mermaid.live:https://mermaid.live
- 打开网页,粘贴Mermaid代码
- 实时预览渲染效果
- 点击"Download PNG/SVG"导出
优点:无需安装,适合临时使用或与他人协作。
方案4:Kroki API(自动化集成)
Kroki提供HTTP API,可以将Mermaid转换为图片,适合集成到CI/CD流程。
# 基础用法
curl -X POST \
-H 'Content-Type: text/plain' \
--data 'erDiagram{A||--o{B}' \
https://kroki.io/mermaid/png \
-o output.png
# URL编码后通过GET请求
echo 'erDiagram{A||--o{B}' | \
curl -X POST --data-binary @- https://kroki.io/mermaid/png > output.png
bash
Python调用示例:
import requests
mermaid_code = """
erDiagram
CUSTOMER ||--o{ ORDER : places
"""
response = requests.post(
'https://kroki.io/mermaid/png',
data=mermaid_code.strip(),
headers={'Content-Type': 'text/plain'}
)
with open('er-diagram.png', 'wb') as f:
f.write(response.content)
python
六、嵌入Word文档
ER图导出为PNG/SVG后,需要嵌入到技术文档中。以下两种方案适合不同场景。
方案1:python-docx(自动化报告)
安装依赖:
pip install python-docx
bash
插入图片代码:
from docx import Document
from docx.shared import Inches, Pt
# 创建或打开文档
doc = Document()
doc.add_heading('数据库设计文档', 0)
# 插入标题
doc.add_heading('ER图', level=2)
# 插入图片(指定宽度5英寸,高度自动)
doc.add_picture('er-diagram.png', width=Inches(5))
# 添加说明
p = doc.add_paragraph()
p.add_run('图1-1:电商系统核心实体关系图')
p.alignment = 2 # 2表示居中
# 保存文档
doc.save('database-design.docx')
python
高级用法:
# 并排两张图片
from docx.enum.text import WD_ALIGN_PARAGRAPH
table = doc.add_table(rows=1, cols=2)
table.style = 'Table Grid'
cell1 = table.cell(0, 0)
cell1.paragraphs[0].add_run('原设计:').bold = True
cell1.paragraphs[0].add_picture('old-er.png', width=Inches(3))
cell2 = table.cell(0, 1)
cell2.paragraphs[0].add_run('优化后:').bold = True
cell2.paragraphs[0].add_picture('new-er.png', width=Inches(3))
python
方案2:pandoc(批量转换)
安装pandoc:
# macOS
brew install pandoc
# 或使用conda
conda install -c conda-forge pandoc
bash
Markdown转Word:
# 基础用法
pandoc er-diagram.md -o database-design.docx
# 指定模板(自定义样式)
pandoc er-diagram.md -o output.docx --reference-doc=template.docx
# 包含图片(图片和md文件在同目录)
pandoc er-diagram.md --resource-path=. -o output.docx
bash
Markdown文件格式(er-diagram.md):
# 电商系统数据库设计
## ER图
下面是系统的核心实体关系图:
(配图说明:原图 er-diagram.png 未随文档迁移,可用上文 Mermaid 代码经 mermaid-cli 导出 PNG 后嵌入此处)
## 实体说明
### 用户表(customer)
- `id`:主键
- `username`:用户名,唯一
...
markdown
七、实战案例:AI组件库项目ER图
现在用Claude Code为课程中的"智能组件库"项目设计ER图。这个项目让开发者通过自然语言描述生成前端组件。
需求分析
- 用户提交组件需求(如"创建一个带验证的登录表单")
- AI生成组件代码(Vue/React)
- 组件支持版本管理
- 用户可以点赞、收藏、评论
- 组件按分类和标签组织
Claude Code Prompt
为"AI智能组件库"项目设计ER图,要求:
实体列表:
1. 用户(id、用户名、邮箱、头像、注册时间)
2. 组件(id、名称、描述、代码、框架类型、创建时间)
3. 分类(id、名称、父级ID)
4. 标签(id、名称)
5. 组件版本(id、组件ID、版本号、代码、创建时间)
6. 点赞记录(id、用户ID、组件ID、点赞时间)
7. 收藏记录(id、用户ID、组件ID、收藏时间)
8. 评论(id、用户ID、组件ID、内容、点赞数、创建时间)
关系:
- 一个用户可以创建多个组件
- 一个组件只能有一个创建者
- 一个组件属于一个分类(多级分类)
- 一个组件可以有多个标签(多对多)
- 一个组件有多个版本
- 一个用户可以对多个组件点赞(但只能赞一次)
- 一个用户可以收藏多个组件
- 一个用户可以评论多个组件
请使用Mermaid erDiagram语法,标注主键(PK)和外键(FK),并用中文描述关系。
text
生成的完整ER图
设计思路解析
- 多对多关系拆分:组件和标签是多对多,通过
COMPONENT_TAG中间表关联 - 自关联:分类支持多级(如"表单"→"登录表单"),通过
parent_id自关联实现 - 版本管理:每次更新创建新版本记录,保留历史代码
- 社交功能:点赞、收藏、评论都独立成表,方便扩展(如后续增加评论回复功能)
- 统计字段:组件表中的
view_count可以缓存浏览量,避免实时计算
导出与嵌入
# 1. 保存为er-diagram.md
# 2. 导出高清PNG
mmdc -i er-diagram.md -o ai-component-library-er.png -w 2048 -s 2
# 3. 嵌入到需求文档
python << 'EOF'
from docx import Document
from docx.shared import Inches
doc = Document()
doc.add_heading('AI智能组件库数据库设计', 0)
doc.add_heading('实体关系图', level=1)
doc.add_picture('ai-component-library-er.png', width=Inches(6))
doc.add_paragraph('图1-1:AI智能组件库ER图').alignment = 2
doc.save('需求文档.docx')
EOF
bash
八、小结
| 任务 | 推荐工具 | 时间成本 |
|---|---|---|
| 快速原型 | Mermaid + VS Code预览 | 5分钟 |
| 交付文档 | mermaid-cli导出PNG + Word | 10分钟 |
| 复杂样式 | PlantUML | 15分钟 |
| 自动化集成 | Kroki API | 按开发量 |
| 海量 SQL 批量出图 | PlantUML jar + skill(ASDF 管 Java) | 一次性配置约 5 分钟,之后一句话 |
最佳实践:
- 先用Claude Code生成基础ER图
- 在VS Code中迭代优化(实时预览)
- 用mermaid-cli导出高清图片
- 用python-docx或pandoc嵌入文档
- 需要批量/复杂样式时切 PlantUML:AI + ASDF 配 Java 环境、jar 命令行渲染、沉淀成 skill 长期复用
一个完整的Claude Code工作流:
# 1. 在Claude Code对话中生成ER图
# 输入:"为XX系统画ER图..."
# 2. 复制Mermaid代码到er.md文件
# 3. 导出PNG
mmdc -i er.md -o er.png -w 2048
# 4. 插入Word(可选)
python -c "from docx import Document; d=Document(); d.add_picture('er.png'); d.save('doc.docx')"
bash
三条命令,从需求到文档,全程不超过5分钟。
↑